<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;

class GoodsType extends Model
{
    /**
     * 定义主键字段
     *
     * @var string
     */
    protected $primaryKey = 'id';

    /**
     * 定义表名，不含前缀
     *
     * @var string
     */
    protected $table      = 'wd_goods_type';

    /**
     * 定义拒绝保存的字段
     *
     * @var array
     */
    protected $guarded    = ['id'];

    /**
     * 开启laravel默认的时间记录
     *
     * @var bool
     */
    public $timestamps = true;

    /**
     * 自连接 
     *关联子类
     * @return void
     */
    public function sub_type()
    {
        return $this->hasMany('App\Models\GoodsType', 'pid', 'id');
    }

    /**
     * 自连接
     * 关联父类
     *
     * @return void
     */
    public function per_type()
    {
        return $this->belongsTo('App\Models\GoodsType', 'pid', 'id');
    }

    /**
     * 一对对
     * 管理商品表
     *
     * @return void
     */
    public function goods()
    {
        return $this->hasMany('App\Models\Goods', 'goods_type_id', 'id');
    }

    /**
     * 远程一对多
     * 父级分类对应商品
     *
     * @return void
     */
    public function far_goods()
    {
        return $this->hasManyThrough('App\Models\Goods', 'App\Models\GoodsType', 'pid', 'goods_type_id', 'id');
        
    }

    /**
     * 商品的分类信息
     *
     * @return void
     */
    public static function type_info( $where )
    {
        
        $data = self::with(['sub_type' => function ( $query ) {
                    $query->where('status', 1)->orderBy('sort')->select('id', 'pid', 'name');
                }, 
                ])->where('pid', 0)
                  ->select('id', 'pid', 'name', 'app_pic')
                  ->orderBy('sort')
                  ->get();

        return $data;
    }

    /**
     * 查找包含商品的分类
     *
     * @return void
     */
    public static function good_type()
    {
        $result = [];

        $data = self::with(['sub_type' => function ( $query ) {
            $query->has('goods')->select('id', 'pid', 'name', 'app_pic')->where('status', 1)->orderBy('sort');
        }])
            ->has('sub_type')
            ->where('pid', 0)
            ->where('status', 1)
            ->select('id', 'pid', 'name', 'app_pic')
            ->orderBy('sort')
            ->get();

        if($data){
            $num = 0;

            foreach ($data as $k => $v) {
                
                if(count($v['sub_type']) <= 0){

                    unset($data[$k]);

                }else{

                    $result[$num] = $v;

                    $num += 1;

                }

            }

        }

        return $result;
    }

}
